package com.learn.acm.five;

import java.util.Arrays;

/**
 * 581. 最短无序连续子数组
 * 给定一个整数数组，你需要寻找一个连续的子数组，如果对这个子数组进行升序排序，那么整个数组都会变为升序排序。
 *
 * 你找到的子数组应是最短的，请输出它的长度。
 *
 * 示例 1:
 *
 * 输入: [2, 6, 4, 8, 10, 9, 15]
 * [2,6,4,8,10,9,15,1]
 * [1,2,3,3,3]
 * [1,3,2,2,2]
 * [1,3,2,3,3]
 * 输出: 5
 * 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序，那么整个表都会变为升序排序。
 * 说明 :
 *
 * 输入的数组长度范围在 [1, 10,000]。
 * 输入的数组可能包含重复元素 ，所以升序的意思是<=。
 */
public class Solution581 {

    public int findUnsortedSubarray(int[] nums) {
        if (nums == null || nums.length == 1) return 0;
        int[] copyNums = Arrays.copyOf(nums,nums.length);
        Arrays.sort(copyNums);
        int left = 0,right = nums.length-1;
        while (left <= right) {
            if (nums[left] == copyNums[left]) {
                left++;
            }
            if (nums[right] == copyNums[right]) {
                right--;
            }
            if (nums[left] != copyNums[left]
                    && nums[right] != copyNums[right]) {
                break;
            }
        }
        return left == right ? 0 : right-left+1;
    }
}
